Technote 1148

Dialog Manager Helper Functions


 

ñ⁄éü

ÇÕÇ∂ÇflÇ…

System 7 Dialog Manager åƒÇ—èoǵÉCÉìÉ^ÉtÉFÅ[ÉX

åƒÇ—èoǵÇÃégÇ¢ï˚

åãò_

DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAÉ_ÉCÉAÉçÉOÇÃä«óùÇóeà’Ç…Ç∑ÇÈÇΩÇfl System 7.0 à»ç~ì±ì¸Ç≥ÇÍÇΩ Dialog Manager åƒÇ—èoǵDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBDZÇÍÇégópÇ∑ÇÈÇΔÅASystem ÇÃÇ≥NjǥNjǻÉTÅ[ÉrÉXÇåƒÇ—èoǵǃÅAÉ}ÉEÉXÉJÅ[É\ÉãÇÃí«ê’ (ǬNjÇËÅAñÓàÛÉJÅ[É\ÉãÇΔ I ÉrÅ[ÉÄÉJÅ[É\Éãëäå›ÇÃïœçX)ÅAÉfÉtÉHÉãÉgÇéÛÇØì¸ÇÍÇÈÇΩÇflÇÃïWèÄìIÇ»ÉLÅ[ëÄçÏÇÃèàóùÅAdžÇÈÇ¢ÇÕÉ_ÉCÉAÉçÉOÇÃÉLÉÉÉìÉZÉãÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

ÇÕÇ∂ÇflÇ…

System 7.0 ÇÃÉäÉäÅ[ÉXÇΔÇΔLJDžÅAïWèÄÉ_ÉCÉAÉçÉOÇÃã@î\ÇçÏê¨Ç∑ÇÈDZÇΔÇ™ÉfÉxÉçÉbÉpÇ…ÇΔǡǃÇÊÇËóeà’Ç…Ç»ÇÈÇÊǧDžÅAÇ¢Ç≠ǬǩÇÃêVǵǢ Dialog Manager åƒÇ—èoǵǙí«â¡Ç≥ÇÍNjǵÇΩÅB

DZÇÍÇÁÇÃåƒÇ—èoǵDžÇÊÇËÅAéüÇÃÇÊǧǻã@î\ÇÃçÏê¨Ç™óeà’Ç…Ç»ÇËNjǵÇΩÅB

  • ÉfÉtÉHÉãÉgÉ{É^ÉìÇÃê›íË (return Ç®ÇÊÇ— enter ÉLÅ[Ç…ëŒÇ∑ÇÈÉGÉCÉäÉAÉXÇÃçÏê¨ÇΔÉfÉtÉHÉãÉgÉ{É^ÉìÇàÕÇfiëæê¸ÇÃï`âÊ)
  • ÉLÉÉÉìÉZÉãÉ{É^ÉìÇÃê›íË (esc ÉLÅ[ÇΔ command-. ÉLÅ[Ç…ëŒÇ∑ÇÈÉGÉCÉäÉAÉXÇÃçÏê¨)
  • ñÓàÛÉJÅ[É\ÉãÇΔ I ÉrÅ[ÉÄÉJÅ[É\ÉãÇëäå›Ç…ïœçXÇ∑ÇÈÇΩÇflÇÃÉJÅ[É\ÉãÇÃí«ê’

êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

Å@

System 7 Dialog Manager åƒÇ—èoǵÉCÉìÉ^ÉtÉFÅ[ÉX

êVǵǢåƒÇ—èoǵÇÕéüÇÃí ÇËÇ≈Ç∑ÅB

/* These are copied from Universal Headers 3.1 */
                  
EXTERN_API( Boolean )
StdFilterProc                   (DialogPtr              theDialog,
                                 EventRecord *          event,
                                 DialogItemIndex *      itemHit);
                  
EXTERN_API( OSErr )
GetStdFilterProc                (ModalFilterUPP *       theProc);
                  
EXTERN_API( OSErr )
SetDialogDefaultItem            (DialogPtr              theDialog,
                                 DialogItemIndex        newItem);
                  
EXTERN_API( OSErr )
SetDialogCancelItem             (DialogPtr              theDialog,
                                 DialogItemIndex        newItem);
                  
EXTERN_API( OSErr )
SetDialogTracksCursor           (DialogPtr              theDialog,
                                 Boolean                tracks);

SetDialogDefaultItem ÇÕÉfÉtÉHÉãÉgÉ{É^ÉìÅAǬNjÇË return Ç®ÇÊÇ— enter ÉLÅ[Ç…âûìöÇ∑ÇÈÉ{É^ÉìÇê›íËǵNjÇ∑ÅBÇ‹ÇΩÅAÉ{É^ÉìÇÃé¸àÕÇ…ÉfÉtÉHÉãÉgÉäÉìÉO (ëæê¸) Çï`âÊǵNjÇ∑ÅB

SetDialogCancelItem ÇÕÉLÉÉÉìÉZÉãÉ{É^ÉìÇê›íËǵNjÇ∑ÅBÉLÉÉÉìÉZÉãÉ{É^ÉìÇÉfÉtÉHÉãÉgÉ{É^ÉìÇΔǵǃê›íËÇ∑ÇÈDZÇΔLJâ¬î\Ç≈Ç∑ÅBÉLÉÉÉìÉZÉãÉ{É^ÉìÇÕ esc ÉLÅ[Ç®ÇÊÇ— command-ÉsÉäÉIÉh (džÇÈÇ¢ÇÕåãâ ìIÇ…ÉsÉäÉIÉhÇÃÉLÅ[ÉRÅ[ÉhÇê∂ê¨Ç∑ÇÈëgÇ›çáÇÌÇπ) ÉLÅ[Ç…âûìöǵNjÇ∑ÅB

SetDialogTracksCursor ÇÕÅAÉJÅ[É\ÉãÇ™ÉeÉLÉXÉgï“èWÉtÉBÅ[ÉãÉhÇÃíÜÇ…ì¸Ç¡ÇΩÇΔǴDžǪÇÃå`èÛÇñÓàÛÇ©ÇÁ I ÉrÅ[ÉÄÇ…ïœçXÇ∑ÇÈÇΩÇfl (džÇÈÇ¢ÇÕÅAÉJÅ[É\ÉãÇ™ÉeÉLÉXÉgï“èWÉtÉBÅ[ÉãÉhÇÃäOÇ…èoÇΩÇΔǴDžǪÇÃå`èÛÇ I ÉrÅ[ÉÄÇ©ÇÁñÓàÛÇ…ïœçXÇ∑ÇÈÇΩÇfl) ÅAÉJÅ[É\ÉãÇÃí«ê’ÇçsǧÇÊǧDž Dialog Manager Ç…éwé¶ÇµÇ‹Ç∑ÅB

GetStdFilterProc Ç®ÇÊÇ— StdFilterProc åƒÇ—èoǵÇÕã¶í≤ǵǃìÆçÏǵÅAÉ_ÉCÉAÉçÉOÇä«óùÇ∑ÇÈçÏãΔÇÃëÂïîï™Ç Dialog Manager Ç…îCÇπÇÈDZÇΔÇâ¬î\DžǵNjÇ∑ÅBDialog Manager ÇÃÉfÉtÉHÉãÉgÇÃìÆçÏÇ™ïKóvÇ»ÇΔÇ´Ç…ÇÕïKÇ∏ StdFilterProc ä÷êîÇåƒÇ—èoǵNjÇ∑ÅB

íçà”:
DZÇÍÇÁÇÃåƒÇ—èoǵÇìKêÿÇ…ìÆçÏÇ≥ÇπÇÈÇ…ÇÕÅAïWèÄÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoÇ∑ïKóvǙdžÇËÇ‹Ç∑ÅBé©ìÆìIÇ»ÉJÅ[É\ÉãÇÃí«ê’ÅAÉfÉtÉHÉãÉgÉ{É^ÉìÇàÕÇfiëæê¸ÇÃï`âÊÅAÇ®ÇÊÇ—ÅgOKÅhÇ®ÇÊÇ—ÅgÉLÉÉÉìÉZÉãÅhÉ{É^ÉìÇ…ëŒâûÇ∑ÇÈÉLÅ[ëÄçÏÇÕÅAïWèÄÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoǵÇΩèÍçáÇÃÇ›ÉAÉNÉeÉBÉuÇ…Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅADZÇÍÇÁÇÃåƒÇ—èoǵÇÕ System 7 Ç…å≈óLÇÃLJÇÃÇ≈džÇËÅASystem 7 ÇÊÇËëOÇÃÉVÉXÉeÉÄÉoÅ[ÉWÉáÉìÇ≈égópÇ∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB

êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

Å@

åƒÇ—èoǵÇÃégÇ¢ï˚

DZÇÍÇÁÇÃåƒÇ—èoǵÇégópÇ∑ÇÈÇΩÇflÇ…ÇÕÅAÉfÉxÉçÉbÉpÇÃê”îCÇ≈é·ä±ÇÃèÄîıÇçsǧïKóvǙdžÇËÇ‹Ç∑ÅBÇ‹Ç∏ÅAñ⁄ìIÇÃÉ_ÉCÉAÉçÉOÇçÏê¨ÇµÇΩå„Ç≈ÅAÇ«ÇÃçÄñ⁄ÇÉfÉtÉHÉãÉgÇ®ÇÊÇ—ÉLÉÉÉìÉZÉãçÄñ⁄DžǵÇΩǢǩÇ Dialog Manager Ç…éwé¶Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉLÉÉÉìÉZÉãçÄñ⁄ÇΔǵǃëIëǵÇΩÉ{É^ÉìÇÕÅAesc ÉLÅ[Ç‹ÇΩÇÕ Command-. ÉLÅ[Ç…ÇÊǡǃëIëÇ≥ÇÍÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAÉfÉtÉHÉãÉgÇΔǵǃéwíËǵÇΩÉ{É^ÉìÇÕÅAreturn Ç‹ÇΩÇÕ enter ÉLÅ[Ç…ÇÊǡǃëIëÇ≥ÇÍÇÈÇÊǧDžǻÇËÅAǪÇÃÉ{É^ÉìÇÃé¸àÕÇ…ÇÕïWèÄìIÇ»ëæÇ¢ã´äEê¸Ç™ï`âÊÇ≥ÇÍÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAǪÇÍǺÇÍÇÃÉ{É^ÉìÇÕìKêÿÇ»ÉLÅ[Ç™âüÇ≥ÇÍÇΩÇΔÇ´Ç…ÉnÉCÉâÉCÉgï\é¶Ç…Ç≥ÇÍÇ‹Ç∑ÅB

SetDialogTracksCursorÇÕÅAÉ}ÉEÉXÉJÅ[É\ÉãÇ™É_ÉCÉAÉçÉOÇÃÇ«ÇÃïîï™Ç…džÇÈǩDžǵÇΩǙǡǃÅADialog Manager Ç™ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ë„ÇÌǡǃÉJÅ[É\ÉãÇê›íËÇ∑ÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅBSetDialogTracksCursor åƒÇ—èoǵDžÅutrueÅvílÇìnÇ∑ÇΔÅADialog Manager ÇÕÉ_ÉCÉAÉçÉOì‡Ç≈ÇÃÉJÅ[É\ÉãÇÃà íuÇèÌÇ…É`ÉFÉbÉNÇ∑ÇÈÇÊǧDžǻÇËÅAÉJÅ[É\ÉãÇ™ï“èWçsÇÃè„Ç…à⁄ìÆÇ∑ÇÈÇΔÅAÉJÅ[É\ÉãÇÃå`èÛÇ I ÉrÅ[ÉÄÇ…ïœçXǵNjÇ∑ÅBÉJÅ[É\ÉãǙǪÇÃëºÇÃèÍèäDždžÇÈÇΔÇ´ÅADialog Manager ÇÕÉJÅ[É\ÉãÇÃå`èÛÇïWèÄìIÇ»ñÓàÛÇ…ê›íËǵNjÇ∑ÅB

éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ê‡ñæÇµÇΩä÷êîÇÃåƒÇ—èoǵï˚ñ@ÇãÔëÃìIÇ…é¶ÇµÇƒÇ¢Ç‹Ç∑ÅB

/* ModalDialog ÉãÅ[ÉvÇ…ì¸ÇÈëOÇ…é·ä±ÇÃèÄîıÇçsǧ */
 ModalFilterUPP              filterProcUPP;
         
 myDialogPtr = GetNewDialog (kMyDialogID, nil, (WindowPtr)-1);
         
 /* OK É{É^ÉìÇ™ÉfÉtÉHÉãÉgÇ≈džÇÈDZÇΔÇ Dialog Manager Ç…éwé¶Ç∑ÇÈ */
 myErr = SetDialogDefaultItem (myDialogPtr, ok);
         
 /* ÉLÉÉÉìÉZÉãÉ{É^ÉìÇ™ÉLÉÉÉìÉZÉãçÄñ⁄Ç≈džÇÈDZÇΔÇ Dialog Manager Ç…éwé¶Ç∑ÇÈ */
 myErr = SetDialogCancelItem (myDialogPtr, cancel);
         
 /* DZÇÃÉ_ÉCÉAÉçÉOÇ…ÇÕï“èWçÄñ⁄ǙdžÇÈÇΩÇflÅAÉ}ÉEÉXÉJÅ[É\ÉãÇ™ï“èWçsÇÃè„DždžÇÈÇΔÇ´Ç…ÅA
 ǪÇÃå`èÛÇ I ÉrÅ[ÉÄÇ…ïœçXÇ∑ÇÈDZÇΔÇ Dialog Manager Ç…éwé¶Ç∑ÇÈ */
 myErr = SetDialogTracksCursor (myDialogPtr, true);
         
 filterProcUPP = NewModalFilterProc (ModalDialogFilter);
         
 do {
  ModalDialog (filterProcUPP, &hitItem);
  switch (hitItem) {
   case ...:
    break;
   case ...:
    break;
   default:
    }
 } while (hitItem != ok && hitItem != cancel);
         
 DisposeRoutineDescriptor (filterProcUPP);
         
         

ñ⁄ìIÇÃÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÉtÉBÉãÉ^ÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB

Boolean ModalDialogFilter (DialogPtr theDialog,
 EventRecord *theEvent, short *itemHit) {
  Boolean   result  = false;
  OSErr   err  = noErr;
  ModalFilterUPP  standardProc;
         
 if ((theEvent->what == updateEvt) &&
  (WindowPtr)theEvent->message != theDialog) {
  err = DispatchWindowUpdate ((WindowPtr)theEvent->message);
 } else if ((theEvent->what == activateEvt) &&
  (WindowPtr)theEvent->message != theDialog) {
  DoActivate (theEvent, true);
 } else {
  err = GetStdFilterProc (&standardProc);
  if (err == noErr) {
   result = CallModalFilterProc (standardProc, theDialog, theEvent, itemHit);
  }
 }
         
 return result;
}

êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

Å@

åãò_

DZÇÍÇÁÇà Dialog Manager åƒÇ—èoǵÇégópÇ∑ÇÈDZÇΔÇ≈ (ÉtÉBÉãÉ^ÇégópǵǃǢǻǢÇΔÇ´Ç≈LJ)ÅAÉ_ÉCÉAÉçÉOÇ…ÇÊÇËàÍä—ǵÇΩÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÇó^ǶÇÈDZÇΔÇ™Ç≈Ç´ÅAÉfÉxÉçÉbÉpé©êgÇ™Ç∑Ç◊ǃÇÃèàóùÇé©ï™Ç≈çsǧÇΔÇ´Ç…î‰Ç◊ÇÍÇŒÅAǩǻÇËÇÃçÏãΔéûä‘ÇêflñÒÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

Å@

éQçlï∂å£

â¸í˘ÇÃóöó

  • 1991îN10åéÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃèâî≈Ç™ÅuTechnote TB 37ÅvÇΔǵǃåˆäJÇ≥ÇÍNjǵÇΩÅB
  • 1991îNÇΔ1999îNÇ…ÉTÉìÉvÉãÉRÅ[ÉhÇÃí«â¡ÇΔâ¸í˘Ç™çsÇÌÇÍNjǵÇΩÅB
  • 1999îN1åéÅAíÒé¶ÇµÇΩÉAÉCÉfÉAÇÇÊÇËÇÊÇ≠êÆóùÇ∑ÇÈÇΩÇflÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃì‡óeÇÕçXêVÇ≥ÇÍNjǵÇΩÅB